MFC поддерживает DLL расширение. В эту DLL можно поместить свои классы производные от классов MFC, но использовать такую DLL могут только приложения MFC. Зато они могут свободно передавать и получать объекты классов. Итак, давайте создадим DLL, в которой будет класс диалога. Наш класс, но порожденный от CDiаlog. Запускаем VC и выбираем в проекте MCF AppWizard Dll.

На первом шаге нужно указать, что это DLL расширения.

Добавляем новый класс в наш проект, как наследника CDiаlog:

Добавляем ссылку на него в проект.
// TestMyClass.cpp : Defines the initialization routines for the DLL. // #include "stdafx.h" #include <afxdllx.h> #include "TestDialog.h"
Теперь немного поменяем конструктор. Дело в том, что сейчас нужно указать идентификатор диалоговой панели. Но мы то его пока не знаем.
В описании:
class AFX_EXT_CLASS CTestDialog : public CDialog
{
// Construction
public:
CTestDialog(CWnd* pParent,UINT nIDD); // standard constructor
// Dialog Data
//{{AFX_DATA(CTestDialog)
//
......
};
В реализации:
////////////////////////////////////////////////
// CTestDialog dialog
CTestDialog::CTestDialog(CWnd* pParent,UINT nIDD)
: CDialog(nIDD, pParent)
{
//{{AFX_DATA_INIT(CTestDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
Обратите внимание, что к классу добавлен модификатор:
...... class AFX_EXT_CLASS CTestDialog : public CDialog ......
AFX_EXT_CLASS говорит, что класс экспортируемый. Скомпилировав проект Вы можете увидеть, что в папке Debug находятся два нужных нам файла:
TestMyClass.dll Сама DLL TestMyClass.lib Библиотека компоновки
Попробуем использовать наш класс ??? Для этого нужно сделать TestDialog.h и TestMyClass.lib в соотвествующей папочке VC, а DLL поместить в Widows\system.
H - Program Files\Microsoft Visual Studio\VC98\Include Lib - Program Files\Microsoft Visual Studio\VC98\Lib
Давайте попробуем создать простое приложение на базе диалогового окна. На него поместим кнопку и подключим наш класс:
// TestDlgDlg.cpp : implementation file // #include "stdafx.h" #include "TestDlg.h" #include "TestDlgDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #pragma comment(lib,"TestMyClass.lib") #include "TestDialog.h" ......
Создадим в ресурсах простое диалоговое окно с идентификатором IDD_DIALOG_TEST и испытаем наш класс.
void CTestDlgDlg::OnButton1()
{
CTestDialog ct(this,IDD_DIALOG_TEST);
ct.DoModal();
}
Все сработает. Попробуйте сами.